﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using MySql.Data.MySqlClient;
using Site.Data;
using Manicure.Entity;
using Manicure.Interface;
using System.Web.UI;

namespace Manicure.Business
{
    public class BTheme : DataAccess, IMetodos<ETheme, EResultado<ETheme>>, IDisposable
    {
        #region IDisposable Members

        [NonSerialized]
        private bool Disposed = false;
        /// <summary>
        /// Destructor da classe. Executa o método Dispose() para liberar recursos.
        /// </summary>
        ~BTheme()
        {
            this.Dispose(false);
        }

        /// <summary>
        /// Libera os recursos usados pela classe. Implementa o método Dispose().
        /// </summary>
        void IDisposable.Dispose()
        {
            // Para o garbage collector para limpesa. Cleaning up twice.                                
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        /// <summary>
        /// Libera os recursos usados pela classe. Evita que um objeto seja liberado duas vezes.
        /// </summary>
        /// <param name="disposing"></param>
        private void Dispose(bool disposing)
        {
            if (!this.Disposed)
            {
                if (disposing)
                {
                    //free any managed resources
                }
                //free unmanaged resources
            }
            Disposed = true;
        }

        #endregion

        #region IMetodo Members
        public EResultado<ETheme> Buscar(ETheme eEntidade)
        {
            EResultado<ETheme> eResultadoTheme = new EResultado<ETheme>();
            List<ETheme> lsteTheme = new List<ETheme>();
            DataTable dtTheme = new DataTable();
            try
            {
                DataAccessParameters.Clear();


                DataAccessParameters.Add("DirVirtual", MySqlDbType.VarChar).Value = eEntidade.DirVirtual;

                DataAccessParameters.Add("SubDominio", MySqlDbType.VarChar).Value = eEntidade.SubDominio;


                dtTheme = ExecuteDataTable("Jp_Cliente_Theme_Listar");

                if (dtTheme != null && dtTheme.Rows.Count > 0)
                {
                    for (int i = 0; i < dtTheme.Rows.Count; i++)
                    {
                        lsteTheme.Add(new ETheme(dtTheme.Rows[i]));
                    }
                    eResultadoTheme.eResultado = lsteTheme;
                    eResultadoTheme.Sucesso = true;
                }
                else
                {
                    eResultadoTheme.Sucesso = false;
                    eResultadoTheme.eResultado = null;
                }

            }
            catch (Exception e)
            {
                eResultadoTheme.Msg = "Erro ao Carregar Theme do cliente!";
                eResultadoTheme.MsgErro = e.ToString();
                eResultadoTheme.Sucesso = false;
                eResultadoTheme.Retorno = null;
            }

            return eResultadoTheme;
        }

        public EResultado<ETheme> Deletar(ETheme eEntidade)
        {
            throw new NotImplementedException();
        }

        public EResultado<ETheme> Gravar(ETheme eEntidade)
        {
            throw new NotImplementedException();
        }

        public EResultado<ETheme> SessaoTheme(Page Objeto)
        {
            EResultado<ETheme> eResultadoTheme = new EResultado<ETheme>();

            if (Objeto.Session["IdCliente"] != null)
            {
                if (Objeto.Session["Skin"] != null)
                {
                    Objeto.Theme = Objeto.Session["Skin"].ToString();
                }
            }
            else
            {
                ETheme eTheme = new ETheme();
                eTheme.Dominio = Objeto.Request.Url.Host.ToString();
                eTheme.DirVirtual = Objeto.Request.ApplicationPath.ToString().Replace("/", "");

                //Verificar se possui SubDomínio
                if (eTheme.Dominio.StartsWith("www") == false)
                {
                    if (eTheme.Dominio.IndexOf(".") > 0)
                    {
                        eTheme.SubDominio = eTheme.Dominio.Substring(0, eTheme.Dominio.IndexOf("."));
                    }
                    else
                    {
                        eTheme.SubDominio = eTheme.Dominio.ToString();
                    }
                }

                using (BTheme bTheme = new BTheme())
                {
                    eResultadoTheme = bTheme.Buscar(eTheme);
                }

                if (eResultadoTheme.Sucesso == true)
                {
                    //Gravando em Sessão o Cliente e Themek
                    Objeto.Session["IdCliente"] = eResultadoTheme.eResultado[0].eCliente.IdCliente;
                    Objeto.Session["SkinTheme"] = eResultadoTheme.eResultado[0].Skin;
                    Objeto.Session["IdSkin"] = eResultadoTheme.eResultado[0].IdSkin;
                    Objeto.Theme = eResultadoTheme.eResultado[0].Skin;
                }
            }

            return eResultadoTheme;
        }
        #endregion
    }
}
